Known microcontroller devices comprise a single central processing unit (microcontroller core) and a plurality of associated peripheral devices, such as timers, analog-to-digital converters, digital-to-analog converters, pulse width modulation units; memories; input/output (I/O) ports, etc. Usually an internal system bus and control logic links all components such that the microcontroller core can individually access the peripherals. Externally, a microcontroller comprises a plurality of external pins wherein most of these pins are usually associated to an I/O port and each port pin may also provide for multifunction by sharing the pin with other peripheral devices. During configuration, a user selects which pin will be assigned to which function. Such assignments can also be changed during execution of a program.
Certain microcontrollers are known that comprise additional accelerator units that may be able to execute instructions separate from the main CPU. Other microcontrollers are known that include two separate CPUs and a plurality of common peripherals. Thus, both cores share all peripherals which requires a crossbar switch that adds latency and wherein the crossbar switch is vulnerable to failure. Existing multi-core devices use switch matrices to allow multiple processors to access shared system resources such as memory and peripherals. Multiple cores may request access to same resource. Conflict resolution circuitry adds latency, hurts performance, and adds cost. The switch matrix is a single point of failure for the system. Some manufactures may implement multiple switch matrices. This requires even more logic to handle fault resolution amongst the switch matrices. Other manufacturers use multiple cores with differing software architectures. These differing cores may have some dedicated resources but other resources are shared.